home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tango2.lha / SOURCES / 2PIX.TEST.S < prev    next >
Text File  |  1988-07-19  |  12KB  |  560 lines

  1. ;    ** RAY SEE IF KODAK CAN MAKE THIS ANY BETTER **
  2. ; ** 2 PIXEL ACCURACY SINE WAVE BY TANGO OF CRYPTIC **
  3. ;     ** ONLY SPREAD SOURCE TO CRYPTIC MEMBERS **
  4.  
  5.     opt c-
  6.     section blitter,code_c            Chip Ram please !!
  7.     include    df1:definitions            Give me some hardware reggies
  8.     include    df1:macros                Give me some macros
  9.     
  10.         
  11. ;LOCAL CONSTANTS
  12.  
  13. icra        equ $bfed01                
  14. allocmem     =-30-168                
  15. freemem     =-30-180                
  16.  
  17. TAKEOVER:
  18.  
  19. ; KILL SYSTEM COPPER, KEYBOARD ETC.....
  20.  
  21.     LEA custom,a5        
  22.     LEA GFXLIB(PC),a1             Point to 'graphics.library'
  23.     MOVEQ #0,D0                     Doesn't matter which version
  24.      MOVE.L 4.w,a6                 EXECBASE
  25.     jsr    -132(a6)                 task switching off (forbid)
  26.      JSR -$228(a6)                  Openlibrary
  27.      MOVE.L D0,GFXBASE             Store library address
  28.  
  29.         
  30. ;Now put the graphic addresses in the CopperList         
  31.  
  32.  
  33.      move.l    #sprite,d1            
  34.      move.w    d1,sp0lo+2
  35.      swap    d1
  36.      move.w    d1,sp0hi+2
  37.  
  38.  
  39.      move.l GFXBASE,d0            Move gfxbase offset to d0
  40.      MOVE.L D0,A6                
  41.      MOVE.W #$80,dmacon(a5)        Turn off copper whilst changing it
  42.      MOVE.L $32(A6),WBCOPPER         Store old (WBench) copper address
  43.      MOVE.L #OURCOPPER,$32(A6)    Point to new copper list (our own)
  44.      MOVE.W #$8080,dmacon(a5)    re-enable copper
  45.  
  46.      MOVE.W #$8010,intena(a5)        
  47.      MOVE.L $6c,old                Save work bench interrupt
  48.      MOVE.L #LEV3,$6c            This sets up a level 3 interrupt
  49.     move.w    intenar(a5),systemints
  50.     move.b    #%01111111,icra        Kill keyboard
  51.         
  52. WAIT:     
  53.     BTST #6,$BFE001                This waits for the left
  54.      BNE.S    WAIT                mouse button to be pressed
  55.     move.l    4.w,a6                EXECBASE
  56.      MOVE.L old,$6c                Restore system interrupts
  57.     MOVE.L GFXBASE,A6
  58.      MOVE.W #$80,dmacon(a5)        Disable DMA
  59.      MOVE.L WBCOPPER,$32(A6)        Restore old copperlist
  60.      MOVE.W #$8080,dmacon(a5)    Enable DMA
  61.      move.w    systemints,d0        Systems interrupt
  62.      or.w    #$c000,d0
  63.      move.w    d0,intena(a5)        Enable OS interrupts
  64.      move.b    #%10011011,icra        Enable keyboard
  65.     clr.w    $dff0a8                Clear music
  66.     clr.w    $dff0b8
  67.     clr.w    $dff0c8
  68.     clr.w    $dff0d8
  69.     move.w    #$f,$dff096
  70.     CLR.L    D0
  71.     rts
  72.  
  73.  
  74. ERROR:    
  75.     move.l 4.w,a6                Get EXECBASE
  76.     jsr    -138(a6)                Permit ( multi-tasking on )
  77.     moveq    #0,d0                Clear d0
  78.      RTS                            Return to AmigaDOS
  79.  
  80.  
  81. ;This is the NEW level 3 interrupt
  82.  
  83. LEV3:
  84.      MOVEM.L d0-d7/a0-a6,-(sp)    Save all registers to the stack
  85.     lea    custom,a5
  86.     AND #$10,intreqr(a5)           Check if interrupt is from Copper 
  87.     BNE out
  88.     move.w    #$8010,$9c                                
  89.     
  90.  
  91. ; ** ALL ROUTINES CALLED (HOPEFULLY) EVERY VBI **
  92.  
  93.     bsr    try_sin
  94.     bsr    testscroll
  95.  
  96.      move.l    sin_screen,d1        Bitplane memory address
  97.     move.w    d1,bp1lo+2            Used for double buffering
  98.      swap    d1
  99.      move.w    d1,bp1hi+2
  100.  
  101.     bsr        move_stars
  102.  
  103.     
  104. out:     
  105.     MOVEM.L (sp)+,d0-d7/a0-a6    Restore the registers
  106.     DC.W $4ef9                    hex value for  JMP instruction
  107. old:     
  108.     DC.L 0                        will jump to normal interrupt
  109.  
  110.  
  111. ; ** Move the sprites **
  112.  
  113. move_stars:
  114.  
  115.     sub.b    #$1,x+1
  116.     sub.b    #$2,x+9
  117.     sub.b    #$1,x+17
  118.     sub.b    #$3,x+25
  119.     sub.b    #$2,x+33
  120.     sub.b    #$4,x+41
  121.     sub.b    #$2,x+49
  122.     sub.b    #$1,x+57
  123.     sub.b    #$3,x+65
  124.     sub.b    #$1,x+73
  125.     sub.b    #$2,x+81
  126.     sub.b    #$4,x+89
  127.     sub.b    #$3,x+97
  128.     sub.b    #$2,x+105
  129.     sub.b    #$1,x+113
  130.     sub.b    #$4,x+121
  131.     sub.b    #$3,x+129
  132.     sub.b    #$3,x+137
  133.     sub.b    #$2,x+145
  134.     sub.b    #$4,x+153
  135.     sub.b    #$1,x+161
  136.     sub.b    #$3,x+169
  137.     sub.b    #$1,x+177
  138.     sub.b    #$2,x+185
  139.     sub.b    #$4,x+193
  140.     sub.b    #$1,x+201
  141.     sub.b    #$3,x+209
  142.     sub.b    #$1,x+217
  143.     sub.b    #$2,x+225
  144.     sub.b    #$2,x+233
  145.     rts
  146.  
  147.  
  148. ; ** Double Buffer The Screen **
  149.  
  150. Buff:
  151.     Eor.l    #10240,Tango                ; Next screen is 10240 bytes along
  152.     Move.l    Tango,D1
  153.     Move.l    #SinePlane,d2
  154.     Add.l    D1,d2
  155.     Move.l    D2,Sin_Screen
  156.     Rts
  157.  
  158.  
  159. ; ** THE SCROLL ROUTINE **
  160.  
  161. testscroll:
  162.     tst.l    stopper
  163.     beq.s    scroll
  164.     sub.l    #1,stopper
  165.     rts
  166. scroll:
  167.     cmp.l    #15*4,val                Blitshifted all <<<
  168.     blo.s    coarse_scroll_it        No then get doing it !!
  169.     bsr        blit_char                Blit letter to screen
  170.     clr.l    val                        Reset index
  171. coarse_scroll_it:
  172.     bsr        coarse                    Scroll all line
  173.     rts                            
  174.     
  175.     
  176. ; ** BLIT LETTER ON THE SCREEN **
  177.  
  178. blit_char
  179.     jsr        text
  180.     lea        custom,a5                Get custom chip address
  181.     move.l    screenx,a0                 Can~t see this picture !!
  182.     move.l    #font,a1                 Put font in blitter source
  183.     add.l    d1,a1
  184. blit_test:
  185.     btst    #14,$dff002                 Blitter busy !!!
  186.     bne    blit_test                     Lets wait till she finishes !
  187.     move.w    #$ffff,bltafwm(a5)        
  188.     move.w    #$ffff,bltalwm(a5)        
  189.     move.l    a0,bltdpth(a5)             Blitter dest D (BOTTOM OF SCREEN)
  190.     move.l    a1,bltapth(a5)             Blitter source A (SCROLLING FONT)
  191.     move.w    #38,bltamod(a5)             Modulo (20-1)*2
  192.     move.w    #38,bltdmod(a5)             Modulo (20-1)*2
  193.     move.w    #$9f0,bltcon0(a5)         Minterms D=A
  194.     clr.w    bltcon1(a5)                 Set Ascending mode
  195.      move.w    #16*64+1,bltsize(a5)     Blit size (SIZE OF FONT)
  196.     rts                                  Return
  197.  
  198.  
  199. ; ** BLITSHIFT THE ENTIRE SCROLL LINE **
  200.  
  201. coarse:
  202.     lea        custom,a5                 
  203.     move.l    screenx,a0                ; Can~t see this picture !!
  204.     move.l    a0,a1
  205.     add.l    #2,a1
  206. blit_wait:
  207.     btst    #14,$dff002            
  208.     bne        blit_wait
  209.     incl    #4,val                    ; (1 for slower)
  210.     move    #15,d7                    ; Amount of pixels to shift(15 for slow)
  211.     ror        #4,d7                    ; Set to correct bits (12-15)
  212.     or        #%100111110000,d7        
  213.     move.l    #-1,bltafwm(a5)
  214.     move.l    a1,bltapth(a5)
  215.     move.l    a0,bltdpth(a5)
  216.     move.w    #0,bltamod(a5)
  217.     move.w    #0,bltdmod(a5)
  218.     move.w    d7,bltcon0(a5)    
  219.     move.w    #80*64+20,bltsize(a5)
  220.     rts    
  221.  
  222.  
  223. ; ** BLITTER CLEAR WHERE THE SINE SCROLL HAS JUST BEEN **
  224.  
  225. CLEAR:
  226.     Move.l    Sin_Screen,a0
  227. wate
  228.     btst    #14,$dff002
  229.     bne.s    wate
  230.     Move.l    a0,Bltdpth(a5)
  231.     Move    #0,Bltdmod(a5)
  232.     Move.l    #$1f00000,Bltcon0(a5)
  233.     Move    #150*64+20,Bltsize(a5)
  234.     Rts
  235.  
  236.  
  237. ; ** DO THE SINEWAVE **
  238. ; BLITTER HAS TO COPY EVERY 2 PIXELS ACROSS, THATS ALOT OF WORK !!!
  239.  
  240. try_sin:
  241.     Bsr        buff
  242.     bsr        clear
  243.     Move.l    Table1,A3
  244.     Move.b    (A3),d1
  245.     Cmp.b    #$ff,d1
  246.     Bne        ItsOkYa
  247.     Move.l    #SinTab,A3
  248. ItsOkYa
  249.     Add.l    hi_amplitude,A3
  250.     Move.l    a3,Table1
  251.     Move.l    A3,Table
  252.     lea        custom,a5                 
  253.     move.l    screenx,a0                 ; Source A
  254.     move.l    #20,d4                    ; Number of chars along screen
  255.     clr.l    d5
  256.     clr.l    d6
  257. ban:
  258.     move.w    #%1100000000000000,d3    ; PUT TO 1 FOR ONE PIXEL 
  259.     move.l    #7,d2                    ; PUT TO 15 FOR ONE PIXEL
  260.     move.w    #$dfc,bltcon0(a5)         
  261.     clr.w    bltcon1(a5)                 
  262.     move.w    #38,bltdmod(a5)             
  263.     move.w    #38,bltbmod(a5)             
  264. blit_test0:
  265.     btst    #14,$dff002                 
  266.     bne    blit_test0                     
  267.     REPT     5
  268.     move.l    sin_screen,a1
  269.     bsr        get_sinvalue
  270.     move.w    d3,bltafwm(a5)        
  271.     move.w    d3,bltalwm(a5)        
  272.     move.l    a1,bltdpth(a5)             
  273.     move.l    a1,bltbpth(a5)             
  274.     move.l    a0,bltapth(a5)             
  275.     move.w    #38,bltamod(a5)             
  276.      move.w    #16*64+1,bltsize(a5)     
  277.     BSR        WAITER
  278.     ENDR
  279.     add.l    #2,a0                    ; Get next letter along
  280.     add.l    #2,d6
  281.     dbf        d4,ban
  282.     rts                                  
  283.  
  284. WAITER:    
  285.     BTST    #14,$DFF002
  286.     BNE.S    WAITER
  287.     RTS
  288.     
  289. get_sinvalue:
  290.     Clr.l    D5
  291.     Move.l    Table,A3
  292.     Move.b    (A3),d5
  293.     cmp.b    #$ff,d5
  294.     bne        cryptic90
  295.     Move.l    #SinTab,A3
  296.     Move.b    (a3),d5
  297. cryptic90
  298.     Add.l    lo_amplitude,A3
  299.     Move.l    A3,Table
  300.     mulu    #40,d5
  301.     add.l    d5,a1
  302.     Add.l    D6,A1
  303.     rts
  304. Table1:    Dc.l    SinTab    
  305. table:    dc.l    sintab
  306.  
  307.  
  308. ; ** RAY SEE IF YOU CAN GET A BETTER SINUS TABLE FOR FULL SCREEN !!! **
  309. sintab:
  310.     dc.b $3C,$3F,$42,$46,$49,$4C,$50,$53,$56,$59
  311.     dc.b $5C,$5F,$61,$64,$67,$69,$6B,$6D,$6F,$71
  312.     dc.b $72,$73,$75,$76,$76,$77,$77,$77,$77,$77
  313.     dc.b $77,$76,$76,$75,$73,$72,$71,$6F,$6D,$6B
  314.     dc.b $69,$67,$64,$61,$5F,$5C,$59,$56,$53,$50
  315.     dc.b $4C,$49,$46,$42,$3F,$3C,$38,$35,$31,$2E
  316.     dc.b $2B,$27,$24,$21,$1E,$1B,$18,$16,$13,$10
  317.     dc.b $E,$C,$A,$8,$6,$5,$4,$2,$1,$1
  318.     dc.b $0,$0,$0,$0,$0,$0,$1,$1,$2,$4
  319.     dc.b $5,$6,$8,$A,$C,$E,$10,$13,$16,$18
  320.     dc.b $1B,$1E,$21,$24,$27,$2B,$2E,$31,$35
  321.     dc.b $38,255
  322.      EVEN
  323.      
  324.  
  325. ; ** CHARACTER DECODER ROUTINE **
  326.  
  327. text:
  328.     move.l    acurent,a2                Get message
  329.     clr.l    d1                        
  330.     move.b    (a2)+,d1                Update it
  331.     move.b    d1,letter                Store in offset
  332.     cmp.b    #255,d1                    Check for end of message
  333.     beq.w    rst_text                If equal, then reset
  334.     cmp.b    #254,d1
  335.     beq        stop
  336.     sub.l    #32,d1                    Subract 32 (ie space)
  337.     asl        d1                        Times by 2 
  338.     move.l    a2,acurent                Update acurent
  339.     CMP.B    #"4",letter                Is letter "K" or larger
  340.     BPL.s    add_more                If larger then add on
  341.     rts                                Return
  342. add_more:
  343.     CMP.B    #"H",letter                Is letter "U" or larger
  344.     BPL.S    add_more2                If larger then add on
  345.     add.l    #40*15,d1                Get next line down (KLMNOPQRST)
  346.     rts
  347. add_more2:                    
  348.     add.l    #40*30,d1                Get next line down (UVWXYZ0123)
  349.     rts
  350. rst_text:
  351.     move.l    #0,d1
  352.     move.l    #message,d2                Get begining of text
  353.     move.l    d2,acurent                Reset to begining
  354.     rts                                Return
  355. stop:
  356.     move.l    #0,d1
  357.     add.l    #1,acurent
  358.     move.l    #150,stopper
  359.     rts
  360.  
  361. message:
  362.  
  363. ; 254=STOP,255=END.
  364.  
  365.     DC.B    " HI RAY    THIS IS A 2 PIXEL SINE SCROLL (HONESTLY!!)"
  366.     DC.B    "  CHECK OUT THE SINETABLE IN THE SOURCE AND SEE IF YOU CAN GET A BETTER AND BIGGER ONE TO GET FULL SCREEN"
  367.     DC.B    "  ALSO SEE IF KODAK CAN MAKE THIS RUN ANY FASTER COS ITS ABIT SLOOOOW"
  368.     DC.B    "  WRITE SOON....      PS. I'LL SEE YA ALL IN BLACKPOOL ON SATURDAY !!!!!"
  369.     DC.B    "   WRAP           ",255
  370.     EVEN
  371.             
  372.  
  373. ; ** THE COPPERLIST **
  374.  
  375. OURCOPPER:
  376. sp0lo:    dc.w    spr0ptl,$0000
  377. sp0hi:    dc.w    spr0pth,$0000
  378.         dc.w    bpl1mod,0,bpl2mod,0
  379.         dc.w    diwstrt,$2c81+16,diwstop,$2cc1
  380.         dc.w    bplcon0,$1200,bplcon1,$0000
  381.         dc.w    ddfstrt,$38,ddfstop,$d0
  382.         dc.w    color00,$000,color01,$094
  383.         dc.w    color16,$aaa,color17,$aaa,color18,$aaa
  384.         dc.w    color19,$aaa,color20,$aaa
  385. bp1lo:    dc.w    bpl1ptl,$0000
  386. bp1hi:    dc.w    bpl1pth,$0000
  387.         wait    $2c09,$fffe
  388.         dc.w    color01,$f00
  389.         wait    $2e09,$fffe
  390.         dc.w    color01,$f11
  391.         wait    $3009,$fffe
  392.         dc.w    color01,$f00
  393.         wait    $3209,$fffe
  394.         dc.w    color01,$f11
  395.         wait    $3409,$fffe
  396.         dc.w    color01,$f22
  397.         wait    $3609,$fffe
  398.         dc.w    color01,$f33
  399.         wait    $389,$fffe
  400.         dc.w    color01,$f44
  401.         wait    $3a09,$fffe
  402.         dc.w    color01,$f55
  403.         wait    $3c09,$fffe
  404.         dc.w    color01,$f66
  405.         wait    $3e09,$fffe
  406.         dc.w    color01,$f77
  407.         wait    $4009,$fffe
  408.         dc.w    color01,$f88
  409.         wait    $4209,$fffe
  410.         dc.w    color01,$f99
  411.         wait    $4409,$fffe
  412.         dc.w    color01,$faa
  413.         wait    $4609,$fffe
  414.         dc.w    color01,$fbb
  415.         wait    $4809,$fffe
  416.         dc.w    color01,$fcc
  417.         wait    $4a09,$fffe
  418.         dc.w    color01,$fdd
  419.         wait    $4c09,$fffe
  420.         dc.w    color01,$fee
  421.         wait    $4e09,$fffe
  422.         dc.w    color01,$fff
  423.         wait    $5109,$fffe
  424.         dc.w    color01,$eef
  425.         wait    $5309,$fffe
  426.         dc.w    color01,$ddf
  427.         wait    $5509,$fffe
  428.         dc.w    color01,$ccf
  429.         wait    $5709,$fffe
  430.         dc.w    color01,$bbf
  431.         wait    $5909,$fffe
  432.         dc.w    color01,$aaf
  433.         wait    $5b09,$fffe
  434.         dc.w    color01,$99f
  435.         wait    $5d09,$fffe
  436.         dc.w    color01,$88f
  437.         wait    $5f09,$fffe
  438.         dc.w    color01,$77f
  439.         wait    $6109,$fffe
  440.         dc.w    color01,$66f
  441.         wait    $6309,$fffe
  442.         dc.w    color01,$55f
  443.         wait    $6509,$fffe
  444.         dc.w    color01,$44f
  445.         wait    $6709,$fffe
  446.         dc.w    color01,$33f
  447.         wait    $6909,$fffe
  448.         dc.w    color01,$22f
  449.         wait    $6a09,$fffe
  450.         dc.w    color01,$11f
  451.         wait    $6c09,$fffe
  452.         dc.w    color01,$00f
  453.         wait    $6e09,$fffe
  454.         dc.w    color01,$11f
  455.         wait    $7109,$fffe
  456.         dc.w    color01,$22f
  457.         wait    $7309,$fffe
  458.         dc.w    color01,$33f
  459.         wait    $7509,$fffe
  460.         dc.w    color01,$44f
  461.         wait    $7709,$fffe
  462.         dc.w    color01,$55f
  463.         wait    $7909,$fffe
  464.         dc.w    color01,$66f
  465.         wait    $7a09,$fffe
  466.         dc.w    color01,$77f
  467.         wait    $7c09,$fffe
  468.         dc.w    color01,$88f
  469.         wait    $7e09,$fffe
  470.         dc.w    color01,$99f
  471.         wait    $8009,$fffe
  472.         dc.w    color01,$aaf
  473.         wait    $8209,$fffe
  474.         dc.w    color01,$bbf
  475.         wait    $8409,$fffe
  476.         dc.w    color01,$ccf
  477.         wait    $8609,$fffe
  478.         dc.w    color01,$ddf
  479.         wait    $8809,$fffe
  480.         dc.w    color01,$eef
  481.         wait    $8a09,$fffe
  482.         dc.w    color01,$fff
  483.         wait    $8c09,$fffe
  484.         dc.w    color01,$fee
  485.         wait    $8e09,$fffe
  486.         dc.w    color01,$fdd
  487.         wait    $9109,$fffe
  488.         dc.w    color01,$fcc
  489.         wait    $9309,$fffe
  490.         dc.w    color01,$fbb
  491.         wait    $9509,$fffe
  492.         dc.w    color01,$faa
  493.         wait    $9709,$fffe
  494.         wait    $9909,$fffe
  495.         dc.w    color01,$f99
  496.         wait    $9b09,$fffe
  497.         dc.w    color01,$f88
  498.         wait    $9d09,$fffe
  499.         dc.w    color01,$f77
  500.         wait    $9f09,$fffe
  501.         dc.w    color01,$f66
  502.         end_copper
  503.         
  504.  
  505. ;LOCAL CONSTANTS
  506.  
  507. WBCOPPER:        DC.L    0
  508. GFXLIB:            DC.B     "graphics.library",0
  509. GFXBASE:        DC.L    0
  510. systemints:        dc.l    0
  511. scroll_offset:    dc.l    0
  512. screenx:        dc.l    picture
  513. letter:            dc.b    0
  514. acurent:        dc.l    message
  515. val:            dc.l    0
  516. lo_amplitude:    dc.l    1                        ; PISS AROUND WITH THESE
  517. hi_amplitude:    dc.l    2                        ; PISS AROUND WITH THESE
  518. Tango            Dc.l    0
  519. sin_screen:        Dc.l    SinePlane
  520. stopper:        dc.l    0
  521.  
  522.  
  523. ;BINARY FILES TO BE INCLUDED
  524.     EVEN
  525. picture    
  526.     dcb.b    10240,0
  527. SinePlane
  528.     dcb.b    10240,0
  529.     dcb.b    10240,0
  530. font
  531.     incbin    df1:neatfont.bin
  532. sprite:
  533.     include    df1:sprite.list
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.     
  541.     
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.     
  550.     
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.